/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.munif.util;

import java.io.InputStream;
import java.io.OutputStream;
import javax.persistence.EntityManager;

/**
 *
 * @author munif
 */
public class ArquivoFacade {

    private static final ArquivoFacade instance = new ArquivoFacade();

    public static ArquivoFacade getInstance() {
        return instance;
    }

    private ArquivoFacade() {
    }

    public void adicionaArquivo(Arquivo arquivo, InputStream inputstream) {
        EntityManager em = Persistencia.getTlem().get();
        em.persist(arquivo);
        int t = 0;
        try {
            while ((t = inputstream.available()) > 0) {
                byte buffer[]; //byte buffer[]=new byte[t>ArquivoParte.TAMANHO_MAXIMO?ArquivoParte.TAMANHO_MAXIMO:t];  OPERADOR TERNÁRIO
                if (t > ArquivoParte.TAMANHO_MAXIMO) {
                    buffer = new byte[ArquivoParte.TAMANHO_MAXIMO];
                } else {
                    buffer = new byte[t];
                }
                if (buffer.length != inputstream.read(buffer)) {
                    throw new RuntimeException("Lido com erro!");
                }
                ArquivoParte arquivoParte = new ArquivoParte();
                arquivoParte.setDados(buffer);
                arquivoParte.setArquivo(arquivo);
                em.persist(arquivoParte);
            }
        } catch (Exception ex) {
            em.getTransaction().rollback();
            ex.printStackTrace();
        }
    }

    public Arquivo recupera(Long id) {
        EntityManager em = Persistencia.getTlem().get();
        return em.find(Arquivo.class, id);
    }

}
